package cn.melonlib.cores.model.anno;

import cn.melonlib.cores.commons.model.entity.IEntity;
import cn.melonlib.cores.model.enums.TypeSupport;

import java.lang.annotation.Documented;
import java.lang.annotation.Retention;

import static java.lang.annotation.RetentionPolicy.RUNTIME;

@Documented
//@Target(TYPE)
@Retention(RUNTIME)
public @interface WorkerModel {
    /**
     * 定义对象的名称，如果为空默认为类名，如果存在jpa的Entity注解，则使用此Entity的name属性作为名称
     * @return
     */
    String name() default "";

    /**
     * 定义模块名称，模块名称指定文件存放目录，默认为包名，存放路径在resources/graphql/schema/module/entity/<包>/路径下
     * @return
     */
    Class<? extends IEntity> modelType();

    /**
     * 需要忽略了的字段
     * @return
     */
    String[] ignore() default  {};

    /**
     * 支持的查询对象
     * @return
     */
    TypeSupport[] support() default {TypeSupport.DISPLAY,TypeSupport.INPUT,TypeSupport.FILTER};

    /**
     * 扩展的类型
     * @return
     */
    Class<?>[] extendsTypes() default {};

    /**
     * 只是依赖的扩展类型
     * @return
     */
    Class<?>[] dependenceTypes() default {};
    /**
     * 更详细的扩展类型
     * @return
     */
    WorkerType[] extendsTypesMore() default {};

    /**
     * 视图形对象
     * @return
     */
    Class<? extends IEntity> voType() default IEntity.class;

    /**
     * 输入型对象
     * @return
     */
    Class<? extends IEntity> inputType() default IEntity.class;

    /**
     * 查询字段对象
     * @return
     */
    Class<? extends IEntity> filterType() default IEntity.class;
}
